package com.ltkj.system.service;

import com.ltkj.system.api.domain.SysStores;
import com.ltkj.system.api.domain.SysUser;
import com.ltkj.system.domain.SysUserStores;
import com.ltkj.system.domain.vo.SysUserStoresVo;

import java.util.List;

/**
 * 基础店铺信息Service接口
 * 
 * @author xupf
 * @date 2023-09-09
 */
public interface ISysStoresService 
{
    /**
     * 查询基础店铺信息
     * 
     * @param id 基础店铺信息主键
     * @return 基础店铺信息
     */
    public SysStores selectSysStoresById(Long id);

    /**
     * 查询基础店铺信息列表
     * 
     * @param sysStores 基础店铺信息
     * @return 基础店铺信息集合
     */
    public List<SysStores> selectSysStoresList(SysStores sysStores);


    /**
     * 根据条件分页查询已分配用户角色列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    public List<SysUser> selectAllocatedList(SysUserStoresVo user);

    /**
     * 根据条件分页查询未分配用户角色列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    public List<SysUser> selectUnallocatedList(SysUserStoresVo user);

    /**
     * 通过店铺ID查询店铺分配用户数量
     *
     * @param storesId 店铺ID
     * @return 结果
     */
    int countUserStoresByStoresId(Long storesId);

    /**
     * 新增基础店铺信息
     * 
     * @param sysStores 基础店铺信息
     * @return 结果
     */
    public int insertSysStores(SysStores sysStores);

    /**
     * 修改基础店铺信息
     * 
     * @param sysStores 基础店铺信息
     * @return 结果
     */
    public int updateSysStores(SysStores sysStores);

    /**
     * 批量删除基础店铺信息
     * 
     * @param ids 需要删除的基础店铺信息主键集合
     * @return 结果
     */
    public int deleteSysStoresByIds(Long[] ids);

    /**
     * 删除基础店铺信息信息
     * 
     * @param id 基础店铺信息主键
     * @return 结果
     */
    public int deleteSysStoresById(Long id);

    /**
     * 取消授权用户店铺
     *
     * @param userStores 用户和店铺关联信息
     * @return 结果
     */
    int deleteAuthUser(SysUserStores userStores);

    /**
     * 批量取消授权用户角色
     *
     * @param storesId 店铺ID
     * @param userIds 需要取消授权的用户数据ID
     * @return 结果
     */
    int deleteAuthUsers(Long storesId, Long[] userIds);

    /**
     * 批量选择授权用户店铺
     *
     * @param storesId 店铺ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    public int insertAuthUsers(Long storesId, Long[] userIds);

    /**
     * 校验店铺名称是否唯一
     *  后期可改为校验 统一社会信用代码 是否唯一
     *
     * @param sysStores 店铺信息
     * @return 结果
     */
    boolean checkStoresNameUnique(SysStores sysStores);

    /**
     * 根据数据权限查询基础店铺信息列表
     *
     * @param sysStores 基础店铺信息主键
     * @return 基础店铺信息
     */
    List<SysStores> selectListByDataScope(SysStores sysStores);
}
